// 引入Node.js核心模块：http（创建服务器）、fs（读取静态HTML）、url（解析请求地址）
const http = require('http');
const fs = require('fs');
const url = require('url');

// 根目录文件/文件夹模拟数据（包含类型、名称、大小、修改时间）
let rootFileData = [
  { fileType: "folder", fileName: "书籍", fileSize: "-", fileTime: "2019-9-1" },
  { fileType: "folder", fileName: "电影", fileSize: "-", fileTime: "2019-9-2" },
  { fileType: "file", fileName: "文本.txt", fileSize: "30byte", fileTime: "2019-9-3" },
  { fileType: "file", fileName: "笔记.txt", fileSize: "45byte", fileTime: "2019-9-4" },
  { fileType: "folder", fileName: "音乐", fileSize: "-", fileTime: "2019-9-5" }
];

// 各文件夹下的子文件模拟数据
const folderContent = {
  "书籍": [
    { fileType: "file", fileName: "JavaScript入门.txt", fileSize: "1024byte", fileTime: "2019-9-10" },
    { fileType: "file", fileName: "Node.js实战.pdf", fileSize: "2048byte", fileTime: "2019-9-11" }
  ],
  "电影": [
    { fileType: "file", fileName: "科幻片.mp4", fileSize: "10240byte", fileTime: "2019-9-12" },
    { fileType: "folder", fileName: "喜剧片", fileSize: "-", fileTime: "2019-9-13" }
  ],
  "音乐": [
    { fileType: "file", fileName: "流行歌曲.mp3", fileSize: "5120byte", fileTime: "2019-9-14" }
  ],
  "喜剧片": [
    { fileType: "file", fileName: "搞笑短片.mp4", fileSize: "8192byte", fileTime: "2019-9-15" }
  ]
};

// 各文件的内容模拟数据
const fileContent = {
  "文本.txt": "这是文本.txt的内容，简易文件资源管理器测试用。",
  "笔记.txt": "Node.js文件系统操作：fs.readFile（读取文件）、fs.writeFile（写入文件）；前后端交互用AJAX。",
  "JavaScript入门.txt": "变量定义：let a = 10; const b = 20; 函数定义：function fn() { console.log('Hello'); }",
  "Node.js实战.pdf": "PDF文件内容（模拟）：第1章 Node.js环境搭建、第2章 HTTP服务器创建、第3章 文件系统操作。",
  "科幻片.mp4": "视频文件内容（模拟）：画面：宇宙飞船场景；音频：引擎轰鸣声+背景音乐。",
  "流行歌曲.mp3": "音频文件内容（模拟）：歌词：'你是我的小呀小苹果...'；旋律：欢快节奏。",
  "搞笑短片.mp4": "视频文件内容（模拟）：画面：角色搞笑动作；音频：观众笑声+背景音乐。"
};

// 创建HTTP服务器
const server = http.createServer((req, res) => {
  // 解析请求URL：获取路径（pathname）和参数（query）
  const parsedUrl = url.parse(req.url, true);
  const pathname = parsedUrl.pathname;
  const query = parsedUrl.query;

  // 1. 处理根路径请求：返回index.html静态页面
  if (pathname === '/') {
    fs.readFile('./index.html', (err, data) => {
      if (err) {
        res.writeHead(404, { 'Content-Type': 'text/plain; charset=utf-8' });
        res.end('404 Not Found：index.html文件不存在');
        return;
      }
      res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
      res.end(data);
    });
  }

  // 2. 处理/getlist请求：返回根目录文件列表
  else if (pathname === '/getlist') {
    res.writeHead(200, { 'Content-Type': 'application/json; charset=utf-8' });
    res.end(JSON.stringify(rootFileData));
  }

  // 3. 处理/delete请求：删除根目录或文件夹中的文件/文件夹
  else if (pathname === '/delete') {
    const fileName = query.fileName;
    const folderName = query.folderName; // 可选：若删除的是文件夹内的内容，需指定文件夹名

    // 校验参数：必须指定要删除的文件名
    if (!fileName) {
      res.writeHead(400, { 'Content-Type': 'text/plain; charset=utf-8' });
      res.end('400 Bad Request：请指定要删除的文件名');
      return;
    }

    // 逻辑：若指定了文件夹名，删除文件夹内的内容；否则删除根目录内容
    let targetData = folderName ? folderContent[folderName] : rootFileData;
    if (folderName && !targetData) {
      res.writeHead(404, { 'Content-Type': 'text/plain; charset=utf-8' });
      res.end(`404 Not Found：文件夹“${folderName}”不存在`);
      return;
    }

    // 过滤掉要删除的文件/文件夹
    const initialLength = targetData.length;
    targetData = targetData.filter(item => item.fileName !== fileName);

    // 若长度未变，说明未找到该文件
    if (targetData.length === initialLength) {
      res.writeHead(404, { 'Content-Type': 'text/plain; charset=utf-8' });
      res.end(`404 Not Found：未找到“${fileName}”`);
      return;
    }

    // 更新数据（根目录或文件夹内数据）
    if (folderName) {
      folderContent[folderName] = targetData;
    } else {
      rootFileData = targetData;
    }

    // 返回删除成功信息
    res.writeHead(200, { 'Content-Type': 'application/json; charset=utf-8' });
    res.end(JSON.stringify({ success: true, message: `“${fileName}”删除成功` }));
  }

  // 4. 处理/getFileContent请求：返回文件内容
  else if (pathname === '/getFileContent') {
    const fileName = query.fileName;
    if (!fileName) {
      res.writeHead(400, { 'Content-Type': 'text/plain; charset=utf-8' });
      res.end('400 Bad Request：请指定要查看的文件名');
      return;
    }

    const content = fileContent[fileName];
    if (!content) {
      res.writeHead(404, { 'Content-Type': 'text/plain; charset=utf-8' });
      res.end(`404 Not Found：未找到“${fileName}”的内容`);
      return;
    }

    res.writeHead(200, { 'Content-Type': 'application/json; charset=utf-8' });
    res.end(JSON.stringify({ success: true, content: content }));
  }

  // 5. 处理/getFolderList请求：返回指定文件夹内的文件列表
  else if (pathname === '/getFolderList') {
    const folderName = query.folderName;
    if (!folderName) {
      res.writeHead(400, { 'Content-Type': 'text/plain; charset=utf-8' });
      res.end('400 Bad Request：请指定要查看的文件夹名');
      return;
    }

    const folderFiles = folderContent[folderName];
    if (!folderFiles) {
      res.writeHead(404, { 'Content-Type': 'text/plain; charset=utf-8' });
      res.end(`404 Not Found：文件夹“${folderName}”不存在或为空`);
      return;
    }

    res.writeHead(200, { 'Content-Type': 'application/json; charset=utf-8' });
    res.end(JSON.stringify(folderFiles));
  }

  // 6. 处理未定义路径：返回404
  else {
    res.writeHead(404, { 'Content-Type': 'text/plain; charset=utf-8' });
    res.end(`404 Not Found：请求路径“${pathname}”不存在`);
  }
});

// 监听8081端口，启动服务器
server.listen(8081, () => {
  console.log('服务器已启动，访问地址：http://localhost:8081');
});